/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package PanelesDeMenu;

import PanelDeProductos.Producto;
import PanelesDeTrabajo.PanelPrincipalMenu;
import com.google.gson.Gson;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import net.miginfocom.swing.MigLayout;

/**
 *
 * @author Anonymus
 */
public class PanelModificarMenu extends JPanel implements ActionListener
{
    JPanel panel1;
    JPanel panel2;
    JPanel panelTextos;
    JPanel panel4;
    JPanel panelNombre;
    JPanel panelDatos;
    JPanel panelNombreTextos;
    JPanel panelAux4;
    
    //COMPONENTES
    JLabel LNombre;
    JLabel labelEditarNombre;
    JLabel LPrecio;
    JLabel LFoto;
    JLabel LCalorias;
    JLabel LDescripcion;
    JLabel LRecomendacion;
    JLabel LPlato;
    JLabel LProducto;
    //TextFields
    JTextField textoNombre;
    JTextField textoPrecio;
    JTextField textoCalorias;
    //TextAreas
    JTextArea TDescripcion;
    JTextArea TRecomendacion;
    JScrollPane scrollDescripcion;
    JScrollPane scrollRecomendacion;
    //Table
    JTable tablaComponentes;
    DefaultTableModel modelo;
    JScrollPane scrollTabla;
    //ComboBox
    JComboBox comboBoxMenus;
    //Buttons
    JButton cargarDatos;
    
    
    
    private ArrayList<Menus> menus = new ArrayList<Menus>();
    private Gson gson = new Gson();

    public PanelModificarMenu() 
    {
        this.setLayout(new BorderLayout());
        panel1 = new JPanel(new BorderLayout());
        panelNombre = new JPanel(new MigLayout());
        panelDatos = new JPanel(new MigLayout());
        panel2 = new JPanel(new MigLayout());
        panelNombreTextos = new JPanel(new BorderLayout());
        panelAux4 = new JPanel(new BorderLayout());
        panelTextos = new JPanel(new MigLayout());
        
        LNombre = new JLabel("Nombre ");
        labelEditarNombre = new JLabel("Nombre");
        LPrecio = new JLabel("Precio: $");
        LFoto = new JLabel("Foto: ");
        LCalorias = new JLabel("Aporte Calorico: (Kcal)");
        LDescripcion = new JLabel("Descripcion ");
        LRecomendacion = new JLabel("Recomendacion ");
        LPlato = new JLabel("Plato");
        LProducto = new JLabel("Producto");
        
        textoPrecio = new JTextField(10);
        textoCalorias = new JTextField(10);
        textoNombre = new JTextField(15);
        
        TDescripcion = new JTextArea(10, 28);
        TRecomendacion = new JTextArea(10, 28);

        scrollDescripcion = new JScrollPane(this.TDescripcion);
        scrollRecomendacion = new JScrollPane(this.TRecomendacion);

        modelo = new DefaultTableModel();
        tablaComponentes = new JTable(modelo);
        modelo.addColumn("Nombre");
        modelo.addColumn("Aporte Calorico");
        tablaComponentes.getTableHeader().setReorderingAllowed(false);
        scrollTabla = new JScrollPane(this.tablaComponentes);
        scrollTabla.setViewportView(this.tablaComponentes);

        comboBoxMenus = new JComboBox();
        
        cargarDatos = new JButton("CARGAR DATOS");
        
        this.panelNombre.add(this.LNombre);
        this.panelNombre.add(this.comboBoxMenus, "wrap");
        this.panelNombre.add(labelEditarNombre);
        this.panelNombre.add(textoNombre);
        this.panelDatos.add(this.LPrecio);
        this.panelDatos.add(this.textoPrecio);
        this.panelDatos.add(this.LCalorias);
        this.panelDatos.add(this.textoCalorias);
        this.panelDatos.add(this.LFoto);

        this.panel1.add(this.panelNombre, BorderLayout.NORTH);
        this.panel1.add(this.panelDatos, BorderLayout.CENTER);

        this.panelTextos.add(this.LDescripcion,"wrap");
        this.panelTextos.add(this.scrollDescripcion,"wrap");
        this.panelTextos.add(this.LRecomendacion,"wrap");
        this.panelTextos.add(this.scrollRecomendacion,"wrap");

//        this.panelNombreTextos.add(this.panel2, BorderLayout.NORTH);
        this.panelNombreTextos.add(this.scrollTabla, BorderLayout.CENTER);
        this.panelNombreTextos.add(this.panelTextos, BorderLayout.EAST);
//        this.panelNombreTextos.add(this.panelAux4, BorderLayout.SOUTH);




        this.add(this.panel1, BorderLayout.NORTH);
        this.add(this.panelNombreTextos, BorderLayout.WEST);
        this.add(this.cargarDatos, BorderLayout.SOUTH);
        
        this.comboBoxMenus.addActionListener(this);
        
        leerTxtMenus();
        llenarComboBoxMenus();
    }
    
    @Override
    public void actionPerformed(ActionEvent e) 
    {
        Object click = e.getSource();
        
        if (click == comboBoxMenus)
        {
            if (comboBoxMenus.getItemCount() > 0)
            {
                String nombreMenu = comboBoxMenus.getSelectedItem().toString();
                llenarCamposModificables(nombreMenu);
            }
        }
    }
    
    public void llenarCamposModificables(String nombreMenu)
    {
        llenarTablaModificable(nombreMenu);
        int indiceMenuElegido = indiceMenu(nombreMenu);
        textoPrecio.setText(menus.get(indiceMenuElegido).getPrecio()+"");
        textoCalorias.setText(menus.get(indiceMenuElegido).getAporteCalorico()+"");
        textoNombre.setText(menus.get(indiceMenuElegido).getNombre());
    }
    
    public void llenarTablaModificable(String nombreMenu)
    {
        while (modelo.getRowCount() > 0)
        {
            modelo.removeRow(0);
        }
        
        int indice = indiceMenu(nombreMenu);
        
        for (int i=0; i<menus.get(indice).getPlatos().size(); i++) //Recorremos los platos de un menu
        {
            Object[] filaPlato = {menus.get(indice).getPlatos().get(i).getNombre()};
            modelo.addRow(filaPlato);
        }
        for (int i=0; i<menus.get(indice).getProductos().size(); i++)
        {
            Object[] filaProducto = {menus.get(indice).getProductos().get(i).getNombre()};
            modelo.addRow(filaProducto);
        }
    }
    
    public int indiceMenu(String nombreMenu)
    {
        for (int i=0; i<menus.size(); i++)
        {
            if (nombreMenu.equals(menus.get(i).getNombre()))
            {
                return i;
            }
        }
        return 0;
    }

    public void llenarComboBoxMenus() 
    {
        comboBoxMenus.removeAllItems();
        
       for (int i=0; i<menus.size(); i++)
       {
           comboBoxMenus.addItem((Object)menus.get(i).getNombre());
       }
    }
    
    public boolean existeNombre(String nombreMenu)
    {
        for (int i=0; i<comboBoxMenus.getItemCount(); i++)
        {
            if (nombreMenu.equals(comboBoxMenus.getItemAt(i).toString()))
            {
                return true; //Existe
            }
        }
        return false; //No existe
    }
    
    public void leerTxtMenus()
    {
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        menus.clear();
        
        try
        {
            archivo = new File ("C:\\BaseDeDatos\\menus.txt");
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            
            String linea;
            
            while((linea=br.readLine())!=null)
            {
                Menus menu = (Menus)gson.fromJson(linea, Menus.class);
                menus.add(menu);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( null != fr )
                {   
                    fr.close();     
                }                  
            }
            catch (Exception e2)
            {
                e2.printStackTrace();
            }
        }
    }
    
    
    
///////////FIN DE LA CLASE panelModificarMenu    

    public void setComboBoxMenus(JComboBox comboBoxMenus) {
        this.comboBoxMenus = comboBoxMenus;
    }
    
    public ArrayList<Menus> getMenus()
    {
        return menus;
    }
}
